package edu.northwestern.cbits.purple_robot_manager.tests; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import junit.framework.Assert; import org.json.JSONException; import org.json.JSONObject; import android.content.Context; import edu.northwestern.cbits.purple_robot_manager.R; import edu.northwestern.cbits.purple_robot_manager.scripting.BaseScriptEngine; import edu.northwestern.cbits.purple_robot_manager.triggers.DateTrigger; import edu.northwestern.cbits.purple_robot_manager.triggers.Trigger; import edu.northwestern.cbits.purple_robot_manager.triggers.TriggerManager; public class DateTriggerTestCase extends RobotTestCase { public DateTriggerTestCase(Context context, int priority) { super(context, priority); } public void test() { if (this.isSelected(this._context) == false) return; TriggerManager triggers = TriggerManager.getInstance(this._context); this.broadcastUpdate("Clearing triggers..."); triggers.removeAllTriggers(); Assert.assertEquals("DTT0", 0, triggers.allTriggers().size()); String triggerId = "date-test"; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss", Locale.getDefault()); long now = System.currentTimeMillis(); try { JSONObject triggerDef = new JSONObject(); triggerDef.put("type", "datetime"); triggerDef.put(Trigger.NAME, "Date Test"); triggerDef.put(Trigger.IDENTIFIER, triggerId); triggerDef .put(Trigger.ACTION, "PurpleRobot.playDefaultTone(); PurpleRobot.testLog('Date Test: Fired!'); PurpleRobot.vibrate('SOS');"); triggerDef.put(DateTrigger.DATETIME_START, sdf.format(new Date(now + 60000))); triggerDef.put(DateTrigger.DATETIME_END, sdf.format(new Date(now + 119999))); String script = "PurpleRobot.updateTrigger('" + triggerId + "', " + triggerDef.toString().replace("'", "\\'").replace("\"", "'") + ");"; BaseScriptEngine.runScript(this._context, script); this.broadcastUpdate("Created test trigger."); Thread.sleep(2000); } catch (JSONException e) { Assert.fail("DTT1"); } catch (InterruptedException e) { Assert.fail("DTT2"); } this.broadcastUpdate("Verifying trigger exists..."); List<Trigger> allTriggers = triggers.allTriggers(); Assert.assertEquals("DTT3", 1, allTriggers.size()); Trigger trigger = allTriggers.get(0); Assert.assertEquals("DTT4", triggerId, trigger.identifier()); Assert.assertEquals("DTT5", trigger.getClass(), DateTrigger.class); DateTrigger dateTrigger = (DateTrigger) trigger; Assert.assertTrue("DTT6", dateTrigger.matches(this._context, new Date(now + 90000))); List<Long> upcomingTimes = triggers.upcomingFireTimes(this._context); Assert.assertTrue("DTT7", upcomingTimes.size() > 0); try { this.broadcastUpdate("Sleeping. 90 seconds remaining...", 0); Thread.sleep(15000); this.broadcastUpdate("Sleeping. 75 seconds remaining...", 0); Thread.sleep(15000); this.broadcastUpdate("Sleeping. 60 seconds remaining...", 0); Thread.sleep(15000); this.broadcastUpdate("Sleeping. 45 seconds remaining...", 0); Thread.sleep(15000); this.broadcastUpdate("Sleeping. 30 seconds remaining...", 0); Thread.sleep(15000); this.broadcastUpdate("Sleeping. 15 seconds remaining...", 0); Thread.sleep(15000); } catch (InterruptedException e) { Assert.fail(); } this.broadcastUpdate("Verifying that trigger fired..."); Assert.assertTrue("DTT8", dateTrigger.lastFireTime(this._context) > 0); Assert.assertTrue("DTT9", dateTrigger.lastFireTime(this._context) < System.currentTimeMillis()); this.broadcastUpdate("Clearing triggers..."); triggers.removeAllTriggers(); } public int estimatedMinutes() { return 2; } public String name(Context context) { return context.getString(R.string.name_date_trigger_test); } }